Changeset: 93b0231f8435 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=93b0231f8435 Modified Files: geom/monetdb5/geom.mal monetdb5/mal/mal_parser.c monetdb5/modules/atoms/color.mal monetdb5/modules/atoms/inet.mal monetdb5/modules/atoms/json.mal monetdb5/modules/atoms/mtime.mal monetdb5/modules/atoms/url.mal monetdb5/modules/atoms/uuid.mal monetdb5/modules/atoms/xml.mal testing/malcheck.py Branch: mosaic Log Message:
Merge with default branch. diffs (truncated from 439 to 300 lines): diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal --- a/geom/monetdb5/geom.mal +++ b/geom/monetdb5/geom.mal @@ -9,30 +9,30 @@ module geom; # @' overwrite lng needed for fixed size! Sizes are fixed in geom.prelude atom mbr:lng; -command tostr() :str address mbrTOSTR; -command fromstr() :mbr address mbrFROMSTR; -command hash() :int address mbrHASH; -command null() :int address mbrNULL; -command cmp() :int address mbrCOMP; +command tostr() address mbrTOSTR; +command fromstr() address mbrFROMSTR; +command hash() address mbrHASH; +command null() address mbrNULL; +command cmp() address mbrCOMP; command read() address mbrREAD; command write() address mbrWRITE; -command mbr(v:str) :mbr address mbrFromString; +command mbr(v:str) :mbr address mbrFromString; atom wkb; -command tostr() :str address wkbTOSTR; -command fromstr() :wkb address wkbFROMSTR; -command hash() :int address wkbHASH; -command null() :int address wkbNULL; -command cmp() :int address wkbCOMP; +command tostr() address wkbTOSTR; +command fromstr() address wkbFROMSTR; +command hash() address wkbHASH; +command null() address wkbNULL; +command cmp() address wkbCOMP; command read() address wkbREAD; command write() address wkbWRITE; -command put() :int address wkbPUT; -command del() :int address wkbDEL; -command length() :int address wkbLENGTH; -command heap() :int address wkbHEAP; +command put() address wkbPUT; +command del() address wkbDEL; +command length() address wkbLENGTH; +command heap() address wkbHEAP; command wkb{unsafe}(v:str) :wkb address wkbFromString; command FromText{unsafe}(w:str, type:int) :wkb address wkbFromText; diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c --- a/monetdb5/mal/mal_parser.c +++ b/monetdb5/mal/mal_parser.c @@ -629,7 +629,7 @@ handleInts: * The type variable are defined within the context of a function * scope. * Additional information, such as a repetition factor, - * encoding tables, or type dependency should be modelled as properties. + * encoding tables, or type dependency should be modeled as properties. */ static int typeAlias(Client cntxt, int tpe) diff --git a/monetdb5/modules/atoms/color.mal b/monetdb5/modules/atoms/color.mal --- a/monetdb5/modules/atoms/color.mal +++ b/monetdb5/modules/atoms/color.mal @@ -8,8 +8,8 @@ module color; atom color:int; -command tostr():str address color_tostr; -command fromstr():color address color_fromstr; +command tostr() address color_tostr; +command fromstr() address color_fromstr; command str(s:color):str address CLRstr diff --git a/monetdb5/modules/atoms/inet.mal b/monetdb5/modules/atoms/inet.mal --- a/monetdb5/modules/atoms/inet.mal +++ b/monetdb5/modules/atoms/inet.mal @@ -6,9 +6,9 @@ atom inet:lng; -command null() :inet +command null() address INETnull; -command cmp() :int +command cmp() address INETcompare; command fromstr() address INETfromString diff --git a/monetdb5/modules/atoms/json.mal b/monetdb5/modules/atoms/json.mal --- a/monetdb5/modules/atoms/json.mal +++ b/monetdb5/modules/atoms/json.mal @@ -6,11 +6,11 @@ atom json:str; -command fromstr():json +command fromstr() address JSONfromString comment "Validate a string to be JSON compliant. A NOOP if valid json, NULL otherwise."; -command tostr():str +command tostr() address JSONtoString comment "Convert JSON to its string equivalent. Dealing with escape characters"; diff --git a/monetdb5/modules/atoms/mtime.mal b/monetdb5/modules/atoms/mtime.mal --- a/monetdb5/modules/atoms/mtime.mal +++ b/monetdb5/modules/atoms/mtime.mal @@ -40,9 +40,9 @@ command date(s:date):date address MTIMEdate_date comment "Noop routine."; -command fromstr() :date +command fromstr() address date_fromstr; -command tostr() :str +command tostr() address date_tostr; @@ -106,9 +106,9 @@ comment "Equality of two dates"; # SEP = '.' or ':' # @end verbatim atom daytime :int; -command fromstr():daytime +command fromstr() address daytime_tz_fromstr; -command tostr():str +command tostr() address daytime_tostr; @@ -180,10 +180,10 @@ comment "Equality of two daytimes"; # timezone. The default local timezone is just GMT+00, but it can be set # arbitrarily. atom timestamp :lng; -command fromstr():timestamp +command fromstr() address timestamp_fromstr; -command tostr():str +command tostr() address timestamp_tostr; command unix_epoch{unsafe}():timestamp @@ -296,9 +296,9 @@ comment "Equality of two timestamps"; # Other values of the rule parameters on creating a timezone will produce a # nil-timezone. atom timezone :lng; -command fromstr():timezone +command fromstr() address tzone_fromstr; -command tostr():str +command tostr() address tzone_tostr; command str(z:timezone):str address MTIMEtzone_tostr; @@ -309,9 +309,9 @@ address MTIMEtimestamp comment "Utility function to create a timestamp from a number of seconds since the Unix epoch"; atom zrule :int; -command fromstr():zrule +command fromstr() address rule_fromstr; -command tostr():str +command tostr() address rule_tostr; command define(m:int,d:int,w:int,h:int,min:int):zrule address MTIMEruleDef0 diff --git a/monetdb5/modules/atoms/url.mal b/monetdb5/modules/atoms/url.mal --- a/monetdb5/modules/atoms/url.mal +++ b/monetdb5/modules/atoms/url.mal @@ -89,10 +89,10 @@ command new(prot:str, host:str, fnme:str address URLnew3 comment "Construct URL from protocol, host,and file"; -command fromstr() :url +command fromstr() address URLfromString comment "Convert a string to an url. "; -command tostr() :str +command tostr() address URLtoString comment "Convert url to string equivalent"; diff --git a/monetdb5/modules/atoms/uuid.mal b/monetdb5/modules/atoms/uuid.mal --- a/monetdb5/modules/atoms/uuid.mal +++ b/monetdb5/modules/atoms/uuid.mal @@ -1,13 +1,13 @@ atom uuid; # the atom functions -command cmp() :int address UUIDcompare; -command fromstr() :uuid address UUIDfromString; -command hash() :int address UUIDhash; -command null() :uuid address UUIDnull; -command read() :uuid address UUIDread; -command tostr() :str address UUIDtoString; -command write() :int address UUIDwrite; +command cmp() address UUIDcompare; +command fromstr() address UUIDfromString; +command hash() address UUIDhash; +command null() address UUIDnull; +command read() address UUIDread; +command tostr() address UUIDtoString; +command write() address UUIDwrite; # fix up the rest of the atom definition command prelude():void address UUIDprelude; diff --git a/monetdb5/modules/atoms/xml.mal b/monetdb5/modules/atoms/xml.mal --- a/monetdb5/modules/atoms/xml.mal +++ b/monetdb5/modules/atoms/xml.mal @@ -6,11 +6,11 @@ atom xml :str; -command fromstr():xml +command fromstr() address XMLfromString comment "Convert a string to an xml."; -command tostr():str +command tostr() address XMLtoString comment "Convert xml to string equivalent"; diff --git a/testing/malcheck.py b/testing/malcheck.py --- a/testing/malcheck.py +++ b/testing/malcheck.py @@ -13,15 +13,18 @@ comreg = re.compile(r'\bcommand\s+' + ma # recognize MAL "pattern" declarations patreg = re.compile(r'\bpattern\s+' + malfre + r'\(\s*(?P<args>[^()]*)\)\s*(?P<rets>\([^()]*\)|:\s*bat\[[^]]*\](?:\.\.\.)?|:\s*[a-zA-Z_][a-zA-Z_0-9]*(?:\.\.\.)?|)\s+' + addrre + r'\b') +atmreg = re.compile(r'\batom\s+(?P<atom>[a-zA-Z_][a-zA-Z0-9_]*)(?:\s*[:=]\s*(?P<base>[a-zA-Z_][a-zA-Z0-9_]*))?\s*;') + treg = re.compile(r':\s*(bat\[[^]]*\]|[a-zA-Z_][a-zA-Z_0-9]*)') expre = re.compile(r'\b[a-zA-Z_0-9]+export\s+(?P<decl>[^;]*;)', re.MULTILINE) nmere = re.compile(r'\b(?P<name>[a-zA-Z_][a-zA-Z_0-9]*)\s*[[(;]') -freg = re.compile(r'str (?P<name>\w+)\((?P<args>[^()]*)\)') +freg = re.compile(r'(?P<rtype>\w+(?:\s*\*)*)\s*\b(?P<name>\w+)\((?P<args>[^()]*)\)') creg = re.compile(r'\bconst\b') sreg = re.compile(r'\bchar\s*\*') areg = re.compile(r'\w+') +argreg = re.compile(r'\s*\w+$') mappings = { 'zrule': 'rule', @@ -37,6 +40,25 @@ mappings = { cmappings = { 'sqlblob': 'blob', } +atomfunctypes = { + # MAL name: (return type, (argument...)) + # where each argument is (type, const) + 'cmp': ('int', (('void *', True), ('void *', True))), + 'del': ('void', (('Heap *', False), ('var_t *', False))), + 'fix': ('int', (('void *', True),)), + 'fromstr': ('int', (('char *', True), ('int *', False), ('ptr *', False))), + 'hash': ('BUN', (('void *', True),)), + 'heap': ('void', (('Heap *', False), ('size_t', False))), + 'length': ('int', (('void *', False),)), + 'nequal': ('int', (('void *', True), ('void *', True))), + 'null': ('void *', (('void', False),)), + 'put': ('var_t', (('Heap *', False), ('var_t *', False), ('void *', True))), + 'read': ('void *', (('void *', False), ('stream *', False), ('size_t', False))), + 'storage': ('long', (('void', False),)), + 'tostr': ('int', (('str *', False), ('int *', False), ('void *', True))), + 'unfix': ('int', (('void *', True),)), + 'write': ('int', (('void *', True), ('stream *', False), ('size_t', False))), + } defre = re.compile(r'^[ \t]*#[ \t]*define[ \t]+(?P<name>[a-zA-Z_][a-zA-Z0-9_]*)\((?P<args>[a-zA-Z0-9_, \t]*)\)[ \t]*(?P<def>.*)$', re.MULTILINE) @@ -44,64 +66,72 @@ cldef = re.compile(r'^[ \t]*#', re.MULTI malfuncs = [] malpats = [] +atomfuncs = [] decls = {} +odecls = {} pdecls = {} def process(f): data = open(f).read() if f.endswith('.mal'): data = re.sub(r'[ \t]*#.*', '', data) # remove comments - res = comreg.search(data) - while res is not None: + for res in comreg.finditer(data): malf, args, rets, func = res.groups() - if malf not in ('del', 'cmp', 'fromstr', 'fix', 'heap', 'hash', 'length', 'null', 'nequal', 'put', 'storage', 'tostr', 'unfix', 'read', 'write') or args.strip(): + if not atomfunctypes.has_key(malf) or args.strip(): rtypes = [] atypes = [] if not rets: rets = ':void' _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list