summaryrefslogtreecommitdiffstats
path: root/third_party/rust/jsparagus-emitter/src/expression_emitter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/jsparagus-emitter/src/expression_emitter.rs')
-rw-r--r--third_party/rust/jsparagus-emitter/src/expression_emitter.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/third_party/rust/jsparagus-emitter/src/expression_emitter.rs b/third_party/rust/jsparagus-emitter/src/expression_emitter.rs
new file mode 100644
index 0000000000..45f0e10664
--- /dev/null
+++ b/third_party/rust/jsparagus-emitter/src/expression_emitter.rs
@@ -0,0 +1,31 @@
+use crate::ast_emitter::AstEmitter;
+use crate::emitter::EmitError;
+
+pub struct ExpressionEmitter<F>
+where
+ F: Fn(&mut AstEmitter) -> Result<(), EmitError>,
+{
+ pub expr: F,
+}
+
+impl<F> ExpressionEmitter<F>
+where
+ F: Fn(&mut AstEmitter) -> Result<(), EmitError>,
+{
+ pub fn emit(self, emitter: &mut AstEmitter) -> Result<(), EmitError> {
+ // [stack]
+
+ (self.expr)(emitter)?;
+ // [stack] VAL
+
+ if emitter.options.no_script_rval {
+ emitter.emit.pop();
+ // [stack]
+ } else {
+ emitter.emit.set_rval();
+ // [stack]
+ }
+
+ Ok(())
+ }
+}