MCPcopy Create free account
hub / github.com/aspizu/goboscript / repr

Method repr

src/codegen/expr.rs:104–174  ·  view source on GitHub ↗
(
        &mut self,
        s: S,
        d: D,
        this_id: NodeID,
        parent_id: NodeID,
        repr: &Repr,
        span: &Span,
        args: &[Expr],
    )

Source from the content-addressed store, hash-verified

102 }
103
104 pub fn repr(
105 &mut self,
106 s: S,
107 d: D,
108 this_id: NodeID,
109 parent_id: NodeID,
110 repr: &Repr,
111 span: &Span,
112 args: &[Expr],
113 ) -> io::Result<()> {
114 if args.len() != repr.args().len() {
115 d.report(
116 DiagnosticKind::ReprArgsCountMismatch {
117 repr: *repr,
118 given: args.len(),
119 },
120 span,
121 );
122 return Ok(());
123 }
124 self.begin_node(Node::new(repr.opcode(), this_id).parent_id(parent_id))?;
125 let arg_ids: Vec<NodeID> = (&mut self.id).take(args.len()).collect();
126 let menu_id = repr.menu().map(|_| self.id.new_id());
127 let mut menu_value = None;
128 let mut menu_is_default = menu_id.is_some();
129 self.begin_inputs()?;
130 for ((&arg_name, arg_value), &arg_id) in repr.args().iter().zip(args).zip(&arg_ids) {
131 if repr.menu().is_some_and(|menu| menu.input == arg_name) {
132 if let Expr::Value { value, span: _ } = arg_value {
133 menu_value = Some(value.clone());
134 continue;
135 } else {
136 menu_is_default = false;
137 self.input_with_shadow(s, d, arg_name, arg_value, arg_id, menu_id.unwrap())?;
138 }
139 } else {
140 self.input(s, d, arg_name, arg_value, arg_id)?;
141 }
142 }
143 if menu_is_default {
144 write_comma_io(&mut self.zip, &mut self.inputs_comma)?;
145 write!(
146 self,
147 r#""{}":[1,{}]"#,
148 repr.menu().unwrap().input,
149 menu_id.unwrap()
150 )?;
151 }
152 self.end_obj()?; // inputs
153 if let Some(fields) = repr.fields() {
154 write!(self, r#","fields":{fields}"#)?;
155 }
156 self.end_obj()?; // node
157 for (arg, arg_id) in args.iter().zip(arg_ids) {
158 self.expr(s, d, arg, arg_id, this_id)?;
159 }
160 if let Some(menu) = repr.menu() {
161 self.begin_node(

Callers 1

exprMethod · 0.80

Calls 15

newFunction · 0.85
write_comma_ioFunction · 0.85
argsMethod · 0.80
reportMethod · 0.80
begin_nodeMethod · 0.80
parent_idMethod · 0.80
menuMethod · 0.80
new_idMethod · 0.80
begin_inputsMethod · 0.80
input_with_shadowMethod · 0.80
end_objMethod · 0.80
fieldsMethod · 0.80

Tested by

no test coverage detected