Signed-off-by: Ry Jones <ry@linux.com>
@@ -1,3 +1,5 @@
+// SPDX-License-Identifier: Apache-2.0
+
use std::process::Command;
fn main() {
lalrpop::Configuration::new()
.use_cargo_dir_conventions()
use crate::pt;
use crate::pt::Loc;
use crate::pt::Comment;
#[derive(Debug, PartialEq, Clone)]
//
// Solidity custom lexer. Solidity needs a custom lexer for two reasons:
// - comments and doc comments
//! Solidity file parser
use crate::pt::CodeLocation;
use diagnostics::Diagnostic;
use std::fmt::{self, Display};
#[derive(Debug, PartialEq, PartialOrd, Ord, Eq, Hash, Clone, Copy)]
use crate::lexer::Lexer;
use crate::pt::*;
use crate::solidity;
// ethereum style ABIs
use crate::sema::ast::{Namespace, Parameter, StructType, Type};
use serde::Serialize;
use crate::sema::ast::Namespace;
use crate::Target;
// Parity Substrate style ABIs/Abi
use crate::sema::ast;
use crate::sema::tags::render;
use handlebars::Handlebars;
use std::fs::File;
use clap::ArgMatches;
use rust_lapper::{Interval, Lapper};
use serde_json::Value;
use clap::{
builder::{ArgAction, ValueParser},
value_parser, Arg, ArgMatches, Command, ValueSource,
use super::vartable::Vartable;
use crate::codegen::cfg::{ControlFlowGraph, Instr};
use crate::codegen::Expression;
use super::statements::{statement, LoopScopes};
use super::{
constant_folding, dead_storage,
use super::cfg::{ControlFlowGraph, Instr};
use super::reaching_definitions;
use crate::codegen::{Builtin, Expression};
use super::cfg::{BasicBlock, ControlFlowGraph, Instr};
use crate::sema::ast::{Namespace, RetrieveType, Type};
use crate::codegen::encoding::{
calculate_size_args, finish_array_loop, increment_four, load_array_item, load_struct_member,
mod borsh_encoding;
use super::storage::{
array_offset, array_pop, array_push, storage_slots_array_pop, storage_slots_array_push,
};
use crate::sema::ast::{DestructureField, Expression, Namespace, Statement};
use crate::sema::Recurse;
use indexmap::IndexSet;
mod array_boundary;
pub mod cfg;
mod constant_folding;
use indexmap::IndexMap;
use num_bigint::BigInt;
use std::collections::LinkedList;
use super::value::Value;
use super::{bigint_to_bitarr, highest_set_bit, track, Variables};
mod expression_values;
mod reaching_values;
mod tests;
use super::expression_values::expression_values;
use super::{track, Variables, MAX_VALUES};
#![cfg(test)]
use super::{highest_set_bit, Variables};
use super::Bits;
use bitvec::prelude::BitArray;
use bitvec::prelude::Lsb0;
use crate::codegen::subexpression_elimination::{
AvailableExpression, AvailableExpressionSet, AvailableVariable, BasicExpression,
ExpressionType, NodeId,
use crate::codegen::subexpression_elimination::available_variable::AvailableVariable;
use crate::codegen::subexpression_elimination::common_subexpression_tracker::CommonSubExpressionTracker;
use crate::codegen::subexpression_elimination::AvailableExpression;
use solang_parser::pt::Loc;
use solang_parser::pt::OptionalCodeLocation;
use crate::codegen::subexpression_elimination::{BasicExpression, ExpressionType};
use crate::codegen::{
vartable::{Storage, Variable},
use crate::codegen::subexpression_elimination::{ConstantType, ExpressionType};
use crate::sema::ast::StringLocation;
use crate::codegen::cfg::Instr;
use crate::codegen::cfg::{BasicBlock, ControlFlowGraph, Instr};
use crate::codegen::reaching_definitions::block_edges;
use crate::sema::ast::Type;
#[cfg(test)]
use crate::{codegen, sema::ast};
use crate::codegen::cfg::{ASTFunction, ControlFlowGraph, Instr};
use crate::codegen::reaching_definitions::{apply_transfers, VarDefs};
use super::Options;
use crate::codegen::{cfg::ControlFlowGraph, vartable::Vartable, OptimizationLevel};
use crate::sema::ast::{Expression, Function, Namespace};
use crate::sema::{ast::Type, symtable::Symtable};
use super::reaching_definitions::{Def, Transfer};
use crate::codegen::cfg::ASTFunction;
cfg::{ControlFlowGraph, Instr},
vartable::Vartable,
use crate::codegen;
use crate::codegen::cfg::{ControlFlowGraph, Instr, InternalCallTy};
use crate::codegen::vartable::Vartable;
use crate::codegen::cfg::{
optimize_and_check_cfg, populate_arguments, populate_named_returns, ASTFunction,
ControlFlowGraph, Instr,
use crate::codegen::statements::LoopScopes;
use crate::codegen::cfg::ControlFlowGraph;
@@ -1 +1,3 @@
mod expression;
use crate::sema::ast::{ArrayLength, Contract, Namespace, StructType, Type};
use std::cell::RefCell;
use std::ffi::CStr;
use crate::{sema::ast, Target};
use inkwell::types::BasicType;
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue};
use crate::codegen::cfg::HashTy;
use super::Binary;
use inkwell::basic_block::BasicBlock;
use crate::sema::ast::RetrieveType;
use crate::sema::ast::{
use crate::{codegen, Target};
use std::collections::HashMap;
extern crate core;
pub mod abi;
// Use the llvm lld linker to create our solana shared object
// This requires an lld with the solana bpf patches.
mod bpf;
mod wasm;
use parity_wasm::builder;
use parity_wasm::elements::{InitExpr, Instruction, Module};
use tiny_keccak::{Hasher, Keccak};
/// Returns an address in https://github.com/ethereum/EIPs/blob/master/EIPS/eip-55.md format
use super::symtable::Symtable;
use crate::diagnostics::Diagnostics;
use super::ast::{
ArrayLength, Builtin, Diagnostic, Expression, File, Function, Namespace, Parameter, StructType,
Symbol, Type,
use num_traits::Zero;
use solang_parser::{
use super::ast::{Diagnostic, ErrorType, Level, Namespace};
use crate::file_resolver::FileResolver;
use codespan_reporting::{diagnostic, files, term};
use crate::sema::{
ast::*,
symtable::Symtable,
use num_bigint::Sign;
use num_rational::BigRational;
use super::address::to_hexstr_eip55;
ArrayLength, Builtin, CallArgs, CallTy, Diagnostic, Expression, Function, Mutability,
use super::ast::{File, Namespace};
use std::{fmt, path};
use super::ast::{Diagnostic, Expression, FormatArg, Namespace, RetrieveType, Type};
use super::expression::{expression, ExprContext, ResolveTo};
Diagnostic, Function, Mutability, Namespace, Parameter, StructType, Symbol, Type,
use self::{
functions::{resolve_params, resolve_returns},
Builtin, DestructureField, Diagnostic, Expression, Function, Mutability, Namespace, Statement,
Type,
ast::{
ArrayLength, Diagnostic, Mutability, Namespace, Note, Parameter, RetrieveType, Symbol, Type,
use super::ast::*;
use super::contracts::is_base;
use super::diagnostics::Diagnostics;
use solang_parser::diagnostics::{ErrorType, Level, Note};
use std::collections::{HashMap, HashSet, LinkedList};
use super::ast::{Diagnostic, Namespace, Parameter, Tag};
use solang_parser::{doccomment::DocComment, pt};
use std::fmt::Write;
use crate::sema::ast::{Expression, Parameter, Statement, TryCatch, Type};
use crate::sema::diagnostics::Diagnostics;
use super::tags::resolve_tags;
use super::SOLANA_BUCKET_SIZE;
use crate::sema::ast::{Builtin, CallArgs, Diagnostic, EventDecl, Expression, Namespace};
use crate::sema::symtable::{Symtable, VariableUsage};
use crate::sema::{ast, symtable};
ast::{Diagnostic, Expression, Namespace, Note, Type, Using, UsingList},
diagnostics::Diagnostics,
Diagnostic, Expression, Function, Namespace, Parameter, Statement, StructType, Symbol,
use crate::sema::ast::{FunctionAttributes, Parameter, RetrieveType, Type};
use crate::sema::symtable::Symtable;
use crate::sema::yul::builtin::YulBuiltInFunction;
use crate::sema::expression::ExprContext;
use crate::sema::symtable::{LoopScopes, Symtable};
use phf::{phf_map, phf_set};
use crate::sema::ast::{ArrayLength, Namespace, Parameter, Symbol, Type};
use crate::sema::expression::{unescape, ExprContext};
use crate::sema::ast::{Namespace, Parameter, Type};
use crate::sema::symtable::{LoopScopes, Symtable, VariableInitializer, VariableUsage};
use crate::sema::ast::{Namespace, Type};
use crate::sema::yul::tests::parse;
#[test]
use crate::{parse_and_resolve, sema::ast, FileResolver, Target};