Commit c9517024 authored by obscuren's avatar obscuren

Merge branch 'develop'

parents fc8bd722 7d64b589
...@@ -19,7 +19,7 @@ ApplicationWindow { ...@@ -19,7 +19,7 @@ ApplicationWindow {
property alias dataText: rawDataField.text property alias dataText: rawDataField.text
onClosing: { onClosing: {
compileTimer.stop() //compileTimer.stop()
} }
MenuBar { MenuBar {
...@@ -86,7 +86,7 @@ ApplicationWindow { ...@@ -86,7 +86,7 @@ ApplicationWindow {
TableView { TableView {
id: asmTableView id: asmTableView
width: 200 width: 200
TableViewColumn{ role: "value" ; title: "" ; width: 200 } TableViewColumn{ role: "value" ; title: "" ; width: asmTableView.width - 2 }
model: asmModel model: asmModel
} }
...@@ -112,13 +112,15 @@ ApplicationWindow { ...@@ -112,13 +112,15 @@ ApplicationWindow {
anchors.right: settings.left anchors.right: settings.left
focus: true focus: true
/*
Timer { Timer {
id: compileTimer id: compileTimer
interval: 500 ; running: true ; repeat: true interval: 500 ; running: true ; repeat: true
onTriggered: { onTriggered: {
dbg.compile(codeEditor.text) dbg.autoComp(codeEditor.text)
} }
} }
*/
} }
Column { Column {
......
...@@ -191,6 +191,7 @@ ApplicationWindow { ...@@ -191,6 +191,7 @@ ApplicationWindow {
inspector.visible = false inspector.visible = false
}else{ }else{
inspector.visible = true inspector.visible = true
inspector.url = webview.experimental.remoteInspectorUrl
} }
} }
onDoubleClicked: { onDoubleClicked: {
...@@ -224,7 +225,6 @@ ApplicationWindow { ...@@ -224,7 +225,6 @@ ApplicationWindow {
WebView { WebView {
id: inspector id: inspector
visible: false visible: false
url: webview.experimental.remoteInspectorUrl
anchors { anchors {
left: root.left left: root.left
right: root.right right: root.right
...@@ -238,7 +238,6 @@ ApplicationWindow { ...@@ -238,7 +238,6 @@ ApplicationWindow {
name: "inspectorShown" name: "inspectorShown"
PropertyChanges { PropertyChanges {
target: inspector target: inspector
url: webview.experimental.remoteInspectorUrl
} }
} }
] ]
......
...@@ -74,6 +74,13 @@ func (self *DebuggerWindow) Compile(code string) { ...@@ -74,6 +74,13 @@ func (self *DebuggerWindow) Compile(code string) {
} }
} }
// Used by QML
func (self *DebuggerWindow) AutoComp(code string) {
if self.Db.done {
self.Compile(code)
}
}
func (self *DebuggerWindow) ClearLog() { func (self *DebuggerWindow) ClearLog() {
self.win.Root().Call("clearLog") self.win.Root().Call("clearLog")
} }
...@@ -110,8 +117,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data ...@@ -110,8 +117,6 @@ func (self *DebuggerWindow) Debug(valueStr, gasStr, gasPriceStr, scriptStr, data
return return
} }
self.SetAsm(script)
var ( var (
gas = ethutil.Big(gasStr) gas = ethutil.Big(gasStr)
gasPrice = ethutil.Big(gasPriceStr) gasPrice = ethutil.Big(gasPriceStr)
...@@ -257,6 +262,10 @@ func (self *Debugger) StepHook(pc int, op ethchain.OpCode, mem *ethchain.Memory, ...@@ -257,6 +262,10 @@ func (self *Debugger) StepHook(pc int, op ethchain.OpCode, mem *ethchain.Memory,
return self.halting(pc, op, mem, stack, stateObject) return self.halting(pc, op, mem, stack, stateObject)
} }
func (self *Debugger) SetCode(byteCode []byte) {
self.main.SetAsm(byteCode)
}
func (self *Debugger) BreakPoints() []int64 { func (self *Debugger) BreakPoints() []int64 {
return self.breakPoints return self.breakPoints
} }
......
...@@ -36,6 +36,7 @@ var LogLevel int ...@@ -36,6 +36,7 @@ var LogLevel int
// flags specific to gui client // flags specific to gui client
var AssetPath string var AssetPath string
//TODO: If we re-use the one defined in cmd.go the binary osx image crashes. If somebody finds out why we can dry this up.
func defaultAssetPath() string { func defaultAssetPath() string {
var assetPath string var assetPath string
// If the current working directory is the go-ethereum dir // If the current working directory is the go-ethereum dir
...@@ -60,7 +61,6 @@ func defaultAssetPath() string { ...@@ -60,7 +61,6 @@ func defaultAssetPath() string {
} }
return assetPath return assetPath
} }
func defaultDataDir() string { func defaultDataDir() string {
usr, _ := user.Current() usr, _ := user.Current()
return path.Join(usr.HomeDir, ".ethereal") return path.Join(usr.HomeDir, ".ethereal")
......
...@@ -8,7 +8,6 @@ import ( ...@@ -8,7 +8,6 @@ import (
"github.com/go-qml/qml" "github.com/go-qml/qml"
"github.com/howeyc/fsnotify" "github.com/howeyc/fsnotify"
"io/ioutil" "io/ioutil"
"log"
"net/url" "net/url"
"os" "os"
"path" "path"
...@@ -59,7 +58,7 @@ func (app *HtmlApplication) RootFolder() string { ...@@ -59,7 +58,7 @@ func (app *HtmlApplication) RootFolder() string {
if err != nil { if err != nil {
return "" return ""
} }
return path.Dir(folder.RequestURI()) return path.Dir(ethutil.WindonizePath(folder.RequestURI()))
} }
func (app *HtmlApplication) RecursiveFolders() []os.FileInfo { func (app *HtmlApplication) RecursiveFolders() []os.FileInfo {
files, _ := ioutil.ReadDir(app.RootFolder()) files, _ := ioutil.ReadDir(app.RootFolder())
...@@ -77,11 +76,13 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) { ...@@ -77,11 +76,13 @@ func (app *HtmlApplication) NewWatcher(quitChan chan bool) {
app.watcher, err = fsnotify.NewWatcher() app.watcher, err = fsnotify.NewWatcher()
if err != nil { if err != nil {
logger.Infoln("Could not create new auto-reload watcher:", err)
return return
} }
err = app.watcher.Watch(app.RootFolder()) err = app.watcher.Watch(app.RootFolder())
if err != nil { if err != nil {
log.Fatal(err) logger.Infoln("Could not start auto-reload watcher:", err)
return
} }
for _, folder := range app.RecursiveFolders() { for _, folder := range app.RecursiveFolders() {
fullPath := app.RootFolder() + "/" + folder.Name() fullPath := app.RootFolder() + "/" + folder.Name()
......
...@@ -2,13 +2,14 @@ package main ...@@ -2,13 +2,14 @@ package main
import ( import (
"github.com/ethereum/eth-go" "github.com/ethereum/eth-go"
"github.com/ethereum/go-ethereum/ethereum/repl"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"io/ioutil" "io/ioutil"
"os" "os"
) )
func InitJsConsole(ethereum *eth.Ethereum) { func InitJsConsole(ethereum *eth.Ethereum) {
repl := NewJSRepl(ethereum) repl := ethrepl.NewJSRepl(ethereum)
go repl.Start() go repl.Start()
utils.RegisterInterrupt(func(os.Signal) { utils.RegisterInterrupt(func(os.Signal) {
repl.Stop() repl.Stop()
...@@ -24,7 +25,7 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) { ...@@ -24,7 +25,7 @@ func ExecJsFile(ethereum *eth.Ethereum, InputFile string) {
if err != nil { if err != nil {
logger.Fatalln(err) logger.Fatalln(err)
} }
re := NewJSRE(ethereum) re := ethrepl.NewJSRE(ethereum)
utils.RegisterInterrupt(func(os.Signal) { utils.RegisterInterrupt(func(os.Signal) {
re.Stop() re.Stop()
}) })
......
...@@ -11,6 +11,8 @@ import ( ...@@ -11,6 +11,8 @@ import (
var Identifier string var Identifier string
var KeyRing string var KeyRing string
var DiffTool bool
var DiffType string
var KeyStore string var KeyStore string
var StartRpc bool var StartRpc bool
var RpcPort int var RpcPort int
...@@ -66,6 +68,8 @@ func Init() { ...@@ -66,6 +68,8 @@ func Init() {
flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file") flag.StringVar(&ConfigFile, "conf", defaultConfigFile, "config file")
flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)") flag.StringVar(&DebugFile, "debug", "", "debug file (no debugging if not set)")
flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)") flag.IntVar(&LogLevel, "loglevel", int(ethlog.InfoLevel), "loglevel: 0-5: silent,error,warn,info,debug,debug detail)")
flag.BoolVar(&DiffTool, "difftool", false, "creates output for diff'ing. Sets LogLevel=0")
flag.StringVar(&DiffType, "diff", "all", "sets the level of diff output [vm, all]. Has no effect if difftool=false")
flag.BoolVar(&StartMining, "mine", false, "start dagger mining") flag.BoolVar(&StartMining, "mine", false, "start dagger mining")
flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console") flag.BoolVar(&StartJsConsole, "js", false, "launches javascript console")
......
...@@ -2,6 +2,7 @@ package main ...@@ -2,6 +2,7 @@ package main
import ( import (
"github.com/ethereum/eth-go/ethlog" "github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils" "github.com/ethereum/go-ethereum/utils"
"runtime" "runtime"
) )
...@@ -20,7 +21,15 @@ func main() { ...@@ -20,7 +21,15 @@ func main() {
// precedence: code-internal flag default < config file < environment variables < command line // precedence: code-internal flag default < config file < environment variables < command line
Init() // parsing command line Init() // parsing command line
// If the difftool option is selected ignore all other log output
if DiffTool {
LogLevel = 0
}
utils.InitConfig(ConfigFile, Datadir, "ETH") utils.InitConfig(ConfigFile, Datadir, "ETH")
ethutil.Config.Diff = DiffTool
ethutil.Config.DiffType = DiffType
utils.InitDataDir(Datadir) utils.InitDataDir(Datadir)
......
package main package ethrepl
import ( import (
"fmt" "fmt"
......
package main package ethrepl
const jsLib = ` const jsLib = `
function pp(object) { function pp(object) {
......
package ethrepl
import (
"bufio"
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethutil"
"io"
"os"
"path"
)
var logger = ethlog.NewLogger("REPL")
type Repl interface {
Start()
Stop()
}
type JSRepl struct {
re *JSRE
prompt string
history *os.File
running bool
}
func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
panic(err)
}
return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist}
}
func (self *JSRepl) Start() {
if !self.running {
self.running = true
logger.Infoln("init JS Console")
reader := bufio.NewReader(self.history)
for {
line, err := reader.ReadString('\n')
if err != nil && err == io.EOF {
break
} else if err != nil {
fmt.Println("error reading history", err)
break
}
addHistory(line[:len(line)-1])
}
self.read()
}
}
func (self *JSRepl) Stop() {
if self.running {
self.running = false
self.re.Stop()
logger.Infoln("exit JS Console")
self.history.Close()
}
}
func (self *JSRepl) parseInput(code string) {
defer func() {
if r := recover(); r != nil {
fmt.Println("[native] error", r)
}
}()
value, err := self.re.Run(code)
if err != nil {
fmt.Println(err)
return
}
self.PrintValue(value)
}
package main package ethrepl
// #cgo darwin CFLAGS: -I/usr/local/opt/readline/include // #cgo darwin CFLAGS: -I/usr/local/opt/readline/include
// #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib // #cgo darwin LDFLAGS: -L/usr/local/opt/readline/lib
......
package main package ethrepl
import ( import (
"bufio" "bufio"
......
package main package ethrepl
import ( import (
"bufio"
"fmt" "fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethpub" "github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/obscuren/otto" "github.com/obscuren/otto"
"io"
"os"
"path"
) )
type Repl interface { type JSStateObject struct {
Start() *ethpub.PStateObject
Stop() eth *JSEthereum
}
type JSRepl struct {
re *JSRE
prompt string
history *os.File
running bool
}
func NewJSRepl(ethereum *eth.Ethereum) *JSRepl {
hist, err := os.OpenFile(path.Join(ethutil.Config.ExecPath, "history"), os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
panic(err)
}
return &JSRepl{re: NewJSRE(ethereum), prompt: "> ", history: hist}
}
func (self *JSRepl) Start() {
if !self.running {
self.running = true
logger.Infoln("init JS Console")
reader := bufio.NewReader(self.history)
for {
line, err := reader.ReadString('\n')
if err != nil && err == io.EOF {
break
} else if err != nil {
fmt.Println("error reading history", err)
break
}
addHistory(line[:len(line)-1])
}
self.read()
}
}
func (self *JSRepl) Stop() {
if self.running {
self.running = false
self.re.Stop()
logger.Infoln("exit JS Console")
self.history.Close()
}
} }
func (self *JSRepl) parseInput(code string) { func (self *JSStateObject) EachStorage(call otto.FunctionCall) otto.Value {
defer func() { cb := call.Argument(0)
if r := recover(); r != nil { self.PStateObject.EachStorage(func(key string, value *ethutil.Value) {
fmt.Println("[native] error", r) value.Decode()
}
}()
value, err := self.re.Run(code) cb.Call(self.eth.toVal(self), self.eth.toVal(key), self.eth.toVal(ethutil.Bytes2Hex(value.Bytes())))
if err != nil { })
fmt.Println(err)
return
}
self.PrintValue(value) return otto.UndefinedValue()
} }
// The JSEthereum object attempts to wrap the PEthereum object and returns // The JSEthereum object attempts to wrap the PEthereum object and returns
...@@ -110,7 +52,7 @@ func (self *JSEthereum) GetKey() otto.Value { ...@@ -110,7 +52,7 @@ func (self *JSEthereum) GetKey() otto.Value {
} }
func (self *JSEthereum) GetStateObject(addr string) otto.Value { func (self *JSEthereum) GetStateObject(addr string) otto.Value {
return self.toVal(self.PEthereum.GetStateObject(addr)) return self.toVal(&JSStateObject{self.PEthereum.GetStateObject(addr), self})
} }
func (self *JSEthereum) GetStateKeyVals(addr string) otto.Value { func (self *JSEthereum) GetStateKeyVals(addr string) otto.Value {
......
package utils package utils
import ( import (
"bitbucket.org/kardianos/osext"
"fmt" "fmt"
"github.com/ethereum/eth-go" "github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethcrypto" "github.com/ethereum/eth-go/ethcrypto"
...@@ -16,6 +17,8 @@ import ( ...@@ -16,6 +17,8 @@ import (
"os" "os"
"os/signal" "os/signal"
"path" "path"
"path/filepath"
"runtime"
"time" "time"
) )
...@@ -164,7 +167,34 @@ func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *ethcry ...@@ -164,7 +167,34 @@ func NewKeyManager(KeyStore string, Datadir string, db ethutil.Database) *ethcry
return keyManager return keyManager
} }
func DefaultAssetPath() string {
var assetPath string
// If the current working directory is the go-ethereum dir
// assume a debug build and use the source directory as
// asset directory.
pwd, _ := os.Getwd()
if pwd == path.Join(os.Getenv("GOPATH"), "src", "github.com", "ethereum", "go-ethereum", "ethereal") {
assetPath = path.Join(pwd, "assets")
} else {
switch runtime.GOOS {
case "darwin":
// Get Binary Directory
exedir, _ := osext.ExecutableFolder()
assetPath = filepath.Join(exedir, "../Resources")
case "linux":
assetPath = "/usr/share/ethereal"
case "windows":
assetPath = "./assets"
default:
assetPath = "."
}
}
return assetPath
}
func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) { func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, SecretFile string, ExportDir string, NonInteractive bool) {
ethcrypto.InitWords(DefaultAssetPath()) // Init mnemonic word list
var err error var err error
switch { switch {
case GenAddr: case GenAddr:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment