1721: object_definition:
1722: | OBJECT declname fun_args compound
1723: {
1724: let name,vs = hd $2 in
1725: let sr = rsrange (slift $1) (fst $4) in
1726: let return_type = `TYP_none in
1727: let body = snd $4 in
1728: let args = List.map snd $3 (* elide srcref *) in
1729: let stmt = mkcurry sr name vs args (return_type,None) `Object body in
1730: fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
1731: }
1732:
1733:
1734: typeparameter_comma_list:
1735: | typeparameter COMMA typeparameter_comma_list { $1 :: $3 }
1736: | typeparameter { [$1] }
1737: | { [] }
1738: typeparameter:
1739: | NAME COLON arrow { snd $1,typecode_of_expr $3 }
1740: | NAME { snd $1,`TYP_none }
1741:
1742: parameter_comma_list:
1743: | parameter COMMA parameter_comma_list { $1 :: $3 }
1744: | parameter { [$1] }
1745: | { [] }
1746: param_qual:
1747: | VAL { `PVal }
1748: | VAR { `PVar }
1749: | REF { `PRef }
1750: | FUNCTION { `PFun }
1751: | { `PVal }
1752:
1753: parameter:
1754: | param_qual NAME COLON arrow { $1, snd $2,typecode_of_expr $4 }
1755: | param_qual NAME { $1, snd $2,`TYP_none }
1756:
Flx functions and procedures are first class citizens: the may both be passed
as arguments to procedures, and they may both be be returned from functions.
Only functions may be passed to functions.