@@ -161,6 +161,10 @@ template dumpExpList(list<DAE.Exp> expl, String stringDelimiter, String expDelim
161161::= (expl |> exp => dumpExp(exp, stringDelimiter) ;separator=expDelimiter)
162162end dumpExpList;
163163
164+ template dumpExpListCrefs(list<DAE.Exp> expl, String stringDelimiter, String expDelimiter)
165+ ::= (expl |> exp => dumpExpCrefs(exp, stringDelimiter) ;separator=expDelimiter)
166+ end dumpExpListCrefs;
167+
164168template dumpCref(DAE.ComponentRef cref)
165169::=
166170match cref
@@ -448,6 +452,135 @@ template dumpNamedPattern(tuple<Pattern, String, Type> pattern)
448452::= match pattern case (pat, id, _) then '<%id%> = <%dumpPattern(pat)%>'
449453end dumpNamedPattern;
450454
455+
456+
457+ template dumpExpCrefs(DAE.Exp exp, String stringDelimiter)
458+ ::=
459+ match exp
460+ case ICONST(__) then ''
461+ case RCONST(__) then ''
462+ case SCONST(__) then ''
463+ case BCONST(__) then ''
464+ case ENUM_LITERAL(__) then AbsynDumpTpl.dumpPath(name)
465+ case CREF(__) then dumpCref(componentRef)
466+ case e as BINARY(__) then
467+ let lhs_str = dumpExpCrefs(exp1, stringDelimiter)
468+ let rhs_str = dumpExpCrefs(exp2, stringDelimiter)
469+ '<%lhs_str%> <%rhs_str%>'
470+ case e as UNARY(__) then
471+ let exp_str = dumpOperand(exp, e, false)
472+ let op_str = dumpUnaryOp(operator)
473+ '<%op_str%><%exp_str%>'
474+ case e as LBINARY(__) then
475+ let lhs_str = dumpExpCrefs(exp1, stringDelimiter)
476+ let rhs_str = dumpExpCrefs(exp2, stringDelimiter)
477+ '<%lhs_str%> <%rhs_str%>'
478+ case e as LUNARY(__) then
479+ let lhs_str = dumpExpCrefs(exp, stringDelimiter)
480+ '<%lhs_str%>'
481+ case e as RELATION(__) then
482+ let lhs_str = dumpExpCrefs(exp1, stringDelimiter)
483+ let rhs_str = dumpExpCrefs(exp2, stringDelimiter)
484+ '<%lhs_str%> <%rhs_str%>'
485+ case IFEXP(__) then
486+ let cond_str = dumpExpCrefs(expCond, stringDelimiter)
487+ let then_str = dumpExpCrefs(expThen, stringDelimiter)
488+ let else_str = dumpExpCrefs(expElse, stringDelimiter)
489+ '<%cond_str%> <%then_str%> <%else_str%>'
490+ case CALL(attr=attr as CALL_ATTR(builtin=true)) then
491+ let argl = dumpExpListCrefs(expLst, stringDelimiter, " ")
492+ '<%argl%>'
493+ case CALL(__) then
494+ let argl = dumpExpListCrefs(expLst, stringDelimiter, " ")
495+ '<%argl%>'
496+ case PARTEVALFUNCTION(__) then
497+ let func_str = AbsynDumpTpl.dumpPathNoQual(path)
498+ let argl = dumpExpList(expList, stringDelimiter, ", ")
499+ 'function <%func_str%>(<%argl%>)'
500+ case ARRAY(__) then
501+ let expl = dumpExpList(array, stringDelimiter, ", ")
502+ '<%if typeinfo() then (if scalar then "/* scalar */ " else "/* non-scalar */ ")%>{ <% expl%> } '
503+ case MATRIX(__) then
504+ let mat_str = (matrix |> row => dumpExpList(row, stringDelimiter, ", ") ;separator="}, { " )
505+ '<%if typeinfo() then '/* matrix <%unparseType(ty) %> */ '%>{{<%mat_str%>}}'
506+ case e as RANGE(__) then
507+ let start_str = dumpOperand(start, e, false)
508+ let step_str = match step case SOME(step) then '<%dumpOperand(step, e, false)%>:'
509+ let stop_str = dumpOperand(stop, e, false)
510+ '<%start_str%>:<%step_str%><%stop_str%>'
511+ case TUPLE(__) then
512+ let tuple_str = dumpExpList(PR, stringDelimiter, " , " )
513+ '(<%tuple_str%>)'
514+ case CAST(__) then
515+ let exp_str = dumpExpCrefs(exp, stringDelimiter)
516+ '(<%exp_str%>)'
517+ case ASUB(__) then
518+ let needs_paren = parenthesizeSubExp(exp)
519+ let lparen = if needs_paren then " ("
520+ let rparen = if needs_paren then " )"
521+ let exp_str = dumpExp(exp, stringDelimiter)
522+ let sub_str = dumpExpList(sub, stringDelimiter, " , " )
523+ '<%lparen%><%exp_str%><%rparen%>[<%sub_str%>]'
524+ case TSUB(__) then
525+ let needs_paren = parenthesizeSubExp(exp)
526+ let lparen = if needs_paren then " ("
527+ let rparen = if needs_paren then " )"
528+ let exp_str = dumpExp(exp, stringDelimiter)
529+ '<%lparen%><%exp_str%><%rparen%>[<%ix%>]'
530+ case SIZE(__) then
531+ let exp_str = dumpExp(exp, stringDelimiter)
532+ let dim_str = match sz case SOME(dim) then ', <%dumpExp(dim, stringDelimiter)%>'
533+ 'size(<%exp_str%><%dim_str%>)'
534+ case CODE(__) then
535+ let code_str = Dump.printCodeStr(code)
536+ '$Code(<%code_str%>)'
537+ case EMPTY(__) then
538+ let name_str = dumpCref(name)
539+ '<EMPTY(scope: <%scope%>, name: <%name_str%>, ty: <%tyStr%>)>'
540+ case REDUCTION(reductionInfo = REDUCTIONINFO(path = name)) then
541+ let name_str = AbsynDumpTpl.dumpPathNoQual(name)
542+ let exp_str = dumpExp(expr, stringDelimiter)
543+ let iter_str = (iterators |> it => dumpReductionIterator(it, stringDelimiter) ;separator=" , " )
544+ '<%name_str%>(<%exp_str%> for <%iter_str%>)'
545+ case LIST(__) then
546+ let expl_str = dumpExpList(valList, stringDelimiter, " , " )
547+ 'List(<%expl_str%>)'
548+ case CONS(__) then
549+ let car_str = dumpExp(car, stringDelimiter)
550+ let cdr_str = dumpExp(cdr, stringDelimiter)
551+ 'listCons(<%car_str%>, <%cdr_str%>)'
552+ case META_TUPLE(__) then
553+ let tuple_str = dumpExpList(listExp, stringDelimiter, " , " )
554+ 'Tuple(<%tuple_str%>)'
555+ case META_OPTION(exp = SOME(exp)) then 'SOME(<%dumpExp(exp, stringDelimiter)%>)'
556+ case META_OPTION(__) then 'NONE()'
557+ case METARECORDCALL(__) then
558+ let name_str = AbsynDumpTpl.dumpPath(path)
559+ let args_str = dumpExpList(args, stringDelimiter, " , " )
560+ '<%name_str%>(<%args_str%>)'
561+ case MATCHEXPRESSION(__) then
562+ let match_ty = dumpMatchType(matchType)
563+ let inputs_str = dumpExpList(inputs, stringDelimiter, " , " )
564+ let case_str = (cases |> c => dumpMatchCase(c) ;separator=" \n" )
565+ <<
566+ <%match_ty%> (<%inputs_str%>)
567+ <%case_str%>
568+ end <%match_ty%>
569+ >>
570+ case BOX(__) then
571+ '#(<%dumpExp(exp, stringDelimiter)%>)'
572+ case UNBOX(__) then
573+ 'unbox(<%dumpExp(exp, stringDelimiter)%>)'
574+ case SHARED_LITERAL(__) then
575+ let ty_str = dumpType(ty)
576+ '#SHARED_LITERAL_<%index%>(<%ty_str%>)#'
577+ case PATTERN(__) then dumpPattern(pattern)
578+ else errorMsg(" ExpressionDumpTpl.dumpExp: Unknown expression." )
579+ end dumpExpCrefs;
580+
581+
582+
583+
451584template errorMsg(String errMessage)
452585::=
453586let() = Tpl.addTemplateError(errMessage)
0 commit comments