X-Git-Url: http://nitlanguage.org diff --git a/src/frontend/parallelization_phase.nit b/src/frontend/parallelization_phase.nit index 08583da..b5cc9fd 100644 --- a/src/frontend/parallelization_phase.nit +++ b/src/frontend/parallelization_phase.nit @@ -47,12 +47,11 @@ private class ParallelizationPhase assert amod isa AModule # Construct the name of the generated class - var modulename = amod.n_moduledecl.n_name.n_id.text - var classname = "Threaded" + modulename + var classname = "Threaded" # Try to get the name of the class if nmethdef.parent isa AStdClassdef then - classname += nmethdef.parent.as(AStdClassdef).n_id.text + classname += nmethdef.parent.as(AStdClassdef).n_qid.n_id.text end # Try to get the name of the method @@ -64,28 +63,29 @@ private class ParallelizationPhase var has_rvalue = nmethdef.n_signature.n_type != null var vtype = "" if has_rvalue then - vtype = "redef type E: " + nmethdef.n_signature.n_type.n_id.text + vtype = "redef type E: " + nmethdef.n_signature.n_type.n_qid.n_id.text end + # create a return type var n_id = new TClassid n_id.text = classname + var n_qid = new AQclassid + n_qid.n_id = n_id var n_type = new AType - n_type.n_id = n_id + n_type.n_qid = n_qid nmethdef.n_signature.n_type = n_type var params = new Array[String] - # case if the method has parameters - if nmethdef.n_signature.n_params.not_empty then - for param in nmethdef.n_signature.n_params do - params.add(""" -var {{{param.n_id.text}}} : {{{param.n_type.n_id.text}}} - -""") - end + for param in nmethdef.n_signature.n_params do + var typ = param.n_type.n_qid.n_id.text + if param.n_type.n_kwnullable != null then typ = "nullable {typ}" + params.add """ +var {{{param.n_id.text}}}: {{{typ}}} +""" end # String corresponding to the generated class - var s=""" + var classdef_source = """ class {{{classname}}} super Thread @@ -98,10 +98,11 @@ end """ # Parse newly obtained classdef - var classdef = toolcontext.parse_classdef(s).as(AStdClassdef) + var classdef = toolcontext.parse_classdef(classdef_source) + assert classdef isa AStdClassdef # Get the `main` fun of the class - var mainfun : nullable AMethPropdef = null + var mainfun: nullable AMethPropdef = null for prop in classdef.n_propdefs do if prop isa AMethPropdef then mainfun = prop end @@ -141,7 +142,10 @@ return thread var newbody = toolcontext.parse_something(s_newbody) nmethdef.n_block = newbody.as(ABlockExpr) + nmethdef.validate + # Add the new class to the module amod.n_classdefs.add(classdef) + classdef.validate end end