@@ -233,9 +233,33 @@ class_specifier returns [void* ast]
233233 ast = Absyn__PARTS(comp,cmt ? mk_some(cmt) : mk_none());
234234 }
235235 )
236- | # (EQUALS ( ast = derived_class | ast = enumeration))
236+ | # (EQUALS ( ast = derived_class | ast = enumeration | ast = overloading ))
237237 ;
238238
239+ overloading returns [ void * ast]
240+ {
241+ l_stack el_stack;
242+ void * el = 0 ;
243+ void * cmt = 0 ;
244+ }
245+ :
246+ # (OVERLOAD
247+ el = name_path
248+ { el_stack.push(el); }
249+ (
250+ el = name_path
251+ { el_stack.push(el); }
252+
253+ )*
254+ (cmt= comment)?
255+ )
256+ {
257+ ast = Absyn__OVERLOAD(make_rml_list_from_stack(el_stack),
258+ cmt ? mk_some(cmt) : mk_none());
259+ }
260+ ;
261+
262+
239263derived_class returns [ void * ast]
240264{
241265 void * p = 0 ;
@@ -365,40 +389,41 @@ protected_element_list returns [void* ast]
365389
366390external_function_call returns [ void* ast]
367391{
368- void* temp= 0 ;
369- void* temp2= 0 ;
370- void* temp3= 0 ;
371- void * lang;
392+ void* expl= 0 ;
393+ void* retexp= 0 ;
394+ void * lang= 0 ;
395+ void * funcname= 0 ;
396+ void * ann= 0 ;
372397 ast = 0 ;
373398}
374399 :
375- (s: STRING)?
400+ (s: STRING { lang = mk_some(to_rml_str(s)); } )?
376401 (# (EXTERNAL_FUNCTION_CALL
377402 (
378- (i: IDENT (temp = expression_list)?)
403+ (i: IDENT (expl = expression_list)?)
379404 {
380- if (s != NULL) { lang = mk_some(to_rml_str(s)); }
381- else { lang = mk_none(); }
382- if (!temp) { temp = mk_nil(); }
383- ast = Absyn__EXTERNAL(Absyn__EXTERNALDECL(mk_some(to_rml_str(i)),lang,mk_none(),temp));
405+ if (i != NULL) {
406+ funcname = mk_some(to_rml_str(i));
407+ }
384408 }
385- | # (e:EQUALS temp2 = component_reference i2:IDENT ( temp3 = expression_list)?)
409+ | # (e:EQUALS retexp = component_reference i2:IDENT ( expl = expression_list)?)
386410 {
387- if (s ! = NULL ) { lang = mk_some(to_rml_str(s)) ; }
388- else { lang = mk_none(); }
389- if (!temp2) { temp2 = mk_nil(); }
390- ast = Absyn__EXTERNAL(Absyn__EXTERNALDECL(mk_some(to_rml_str(i2)),lang,mk_some(temp2),temp3));
411+ if (retexp ) { retexp = mk_some(retexp) ; }
412+ if (i2 ! = NULL) {
413+ funcname = mk_some(to_rml_str(i2));
414+ }
391415 }
392416 )
393- ))?
417+ ))? (ann = annotation)?
394418 {
395- if (!ast) {
396- if (s != NULL) { lang = mk_some(to_rml_str(s)); }
397- else { lang = mk_none(); }
398- ast = Absyn__EXTERNAL(Absyn__EXTERNALDECL(mk_none(),lang,mk_none(),mk_nil()));
399- }
419+ if (!expl) { expl = mk_nil(); }
420+ if (!retexp) { retexp = mk_none(); }
421+ if (!lang) { lang = mk_none(); }
422+ if (!ann) { ann = mk_none(); } else { ann = mk_some(ann); }
423+ if (!funcname) { funcname = mk_none(); }
424+ ast = Absyn__EXTERNAL(Absyn__EXTERNALDECL(funcname,
425+ lang, retexp, expl), ann);
400426 }
401-
402427 ;
403428
404429element_list returns [ void* ast]
0 commit comments