Skip to content

Commit ad9442a

Browse files
author
Peter Aronsson
committed
Added overload operator, again! and fixed external function bug.
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1084 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent 40d0588 commit ad9442a

File tree

1 file changed

+48
-23
lines changed

1 file changed

+48
-23
lines changed

modeq/absyn_builder/walker.g

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
239263
derived_class returns [void *ast]
240264
{
241265
void *p = 0;
@@ -365,40 +389,41 @@ protected_element_list returns [void* ast]
365389

366390
external_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

404429
element_list returns [void* ast]

0 commit comments

Comments
 (0)