Add support for marshal with loads and dumps

This commit is contained in:
Daniel Shaulov
2019-05-27 22:09:47 +03:00
parent 96df472d85
commit b2f17a18ea
10 changed files with 73 additions and 17 deletions

View File

@@ -10,10 +10,11 @@ use num_complex::Complex64;
use rustpython_parser::ast;
use std::collections::{HashMap, HashSet};
use std::fmt;
use serde::{Serialize, Deserialize};
/// Primary container of a single code object. Each python function has
/// a codeobject. Also a module has a codeobject.
#[derive(Clone, PartialEq)]
#[derive(Clone, PartialEq, Serialize, Deserialize)]
pub struct CodeObject {
pub instructions: Vec<Instruction>,
pub label_map: HashMap<Label, usize>,
@@ -29,6 +30,7 @@ pub struct CodeObject {
}
bitflags! {
#[derive(Serialize, Deserialize)]
pub struct FunctionOpArg: u8 {
const HAS_DEFAULTS = 0x01;
const HAS_KW_ONLY_DEFAULTS = 0x02;
@@ -38,7 +40,7 @@ bitflags! {
pub type Label = usize;
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum NameScope {
Local,
NonLocal,
@@ -46,7 +48,7 @@ pub enum NameScope {
}
/// A Single bytecode instruction.
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Instruction {
Import {
name: String,
@@ -187,14 +189,14 @@ pub enum Instruction {
use self::Instruction::*;
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum CallType {
Positional(usize),
Keyword(usize),
Ex(bool),
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Constant {
Integer { value: BigInt },
Float { value: f64 },
@@ -208,7 +210,7 @@ pub enum Constant {
Ellipsis,
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ComparisonOperator {
Greater,
GreaterOrEqual,
@@ -222,7 +224,7 @@ pub enum ComparisonOperator {
IsNot,
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum BinaryOperator {
Power,
Multiply,
@@ -240,7 +242,7 @@ pub enum BinaryOperator {
Or,
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum UnaryOperator {
Not,
Invert,
@@ -248,7 +250,7 @@ pub enum UnaryOperator {
Plus,
}
#[derive(Debug, Clone, PartialEq)]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Varargs {
None,
Unnamed,